У меня только один LANA и связь клиент сервер я тестирую сейчас на одном компьютере.Потом протестирую в сети. Данный подход позволил мне всё упростить.Сначала нам необходимо подготовить буфер в переменной NCB ncb_event. GlobalAlloc выделяет память. CreateEvent создает объект сообщения.
NCB ncb; HANDLE *events; events = (HANDLE *)GlobalAlloc(GMEM_FIXED, sizeof(HANDLE) lenum.length); ClearStruct(&ncb); events[0] = CreateEvent(NULL, TRUE, FALSE, NULL); ncb.ncb_event = events;В процедуры я добавил изменения смотрите проект.
Первым шагом необходимо проинициализировать LANA - это мы делали и знакомо
if (ResetNetBios(LANA_NUM)!=NRC_GOODRET) printf("Error Reset \n");
else printf("God Reset\n");
Добавить имя это тоже нам знакомо
if (AddNetBiosName(LANA_NUM,CLIENT_NAME)!=NRC_GOODRET) printf("Error Add \n");
else printf("God Add Name\n");
А вот теперь функция Connect
void Connect(PNCB pncb)
{
int dwRetCode;
// в поле ncb_name имя клиента
FillMemory(pncb->ncb_name, sizeof(pncb->ncb_name), ' ');
CopyMemory(pncb->ncb_name, CLIENT_NAME, strlen(CLIENT_NAME));
// в поле ncb_callname имя сервера
FillMemory(pncb->ncb_callname, sizeof(pncb->ncb_callname), ' ');
CopyMemory(pncb->ncb_callname, SERVER_NAME, strlen(SERVER_NAME));
// команда вызова
pncb->ncb_command = NCBCALL | ASYNCH;
dwRetCode = Netbios(pncb);
if (pncb->ncb_retcode != NRC_PENDING) printf("Error Connect\n");
return;
}
И наконец ожидание ответа
while (!done)
{
conn = WaitForMultipleObjects(lenum.length, events, FALSE, INFINITE);
if (ncb.ncb_retcode == NRC_GOODRET)
{
printf("CONNECTED! \n");
done = TRUE;
}
}
Для тестирования клиента необходим сервер(программа). Она то у меня работает (в следующем шаге создадим) и поэтому этот шаг протестирован. Сразу хочу предупредить, что если у Вас LANA больше чем 1 и он не равен 0, то могут быть ошибки. Смотрите определения моих макроподстановок
#define CLIENT_NAME "myclient" #define SERVER_NAME "myserver" #define MAX_SESSION 50 #define MAX_NAMES 50 #define LANA_NUM 000